package com.vxdata

object 函数_3_闭包与函数柯里化 {
  /**
   * TODO 闭包
   * 如果一个函数，访问到了它的外部（局部）变量的值，那么这个函数和他所处的环境，称为闭包
   */
  // 定义一个匿名函数, 其中有一个 形参 i
  val multiplier = (i: Int) => i * 10


  var factor = 3
  // 定义一个新的匿名函数, 其中有一个形参 i, 还有一个变量 factor
  // factor 是函数外部的变量, 所以这个函数和他所处的 环境，称为闭包
  val multiplier1 = (i: Int) => i * factor


  /**
   * TODO 函数柯里化
   * 把一个参数列表的多个参数，变成多个参数列表。
   */
  // 定义一个函数, 使用函数的时候应该是这样: strcat(1,2)
  def strcat(s1: String, s2: String) = {
    s1 + s2
  }

  // 把函数柯里化 , 使用函数编程这样了 strcat1(1)(2)
  def strcat1(s1: String)(s2: String) = {
    s1 + s2
  }


  def main(args: Array[String]) {
    println("muliplier(1) value = " + multiplier1(1))
    println("muliplier(2) value = " + multiplier(2))
  }


}
